﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
using Microsoft.Xna.Framework.Net;
using Microsoft.Xna.Framework.Storage;

namespace spaceInvaders
{
    class Disparo
    {

        public enum Direccion
        {
            Arriba,
            Abajo2,
            Abajo,
            Izda,
            Dcha,
            ArribaDcha,
            ArribaIzda,
            AbajoDcha,
            AbajoIzda
        };


        private Vector2 pos; //posicion del disparo
        private Texture2D textura; //textura del disparo
        private bool vivo; //indica si el disparo aun esta en el juego
        private Direccion direccion; //direccion del disparo
        


        #region Pripiedades
        public Vector2 Posicion
        {
            get { return pos; }
            set { pos = value; }
        }
        

        public Texture2D Textura
        {
            get { return textura; }
            set { textura = value; }
        }
        

        public bool Vivo
        {
            get { return vivo; }
            set { vivo = value; }
        }

        public Rectangle Rect
        {
            get { return new Rectangle((int)pos.X, (int)pos.Y, textura.Width, textura.Height); }
        }


        #endregion


        /// <summary>
        /// Constructor de la clase
        /// </summary>
        /// <param name="posicionInicial">Posicion incial del disparo. Coincidira con el de la nave</param>
        /// <param name="sprite">Sprite del disparo</param>
        public Disparo(Vector2 posicionInicial, Texture2D sprite, Direccion dir)
        {
            pos = posicionInicial;
            textura = sprite;
            vivo = true;
            direccion = dir;
        }


        /// <summary>
        /// Actualiza el disparo. Si se sale de los margenes de la pantalla, 
        /// pone su variable "vivo" a false
        /// </summary>
        public void actualiza()
        {
            if (pos.Y + textura.Height < 0) vivo = false;
            if (pos.Y > 600) vivo = false;
            if (pos.X + textura.Width < 0) vivo = false;
            if (pos.X > 800) vivo = false;

            if (vivo)
            {
                if (direccion == Direccion.Arriba)
                    pos.Y -= 10; //velocidad disparo nave arriba
                if (direccion == Direccion.Abajo2)
                    pos.Y += 5; //velocidad disparo enemigos
                if (direccion == Direccion.Abajo)
                    pos.Y += 10; //velocidad disparo nave abajo
                if (direccion == Direccion.Izda)
                    pos.X -= 10; //velocidad disparo nave izquierda
                if (direccion == Direccion.Dcha)
                    pos.X += 10; //velocidad disparo nave derecha
                if (direccion == Direccion.ArribaDcha)
                {
                    pos.X += 7;
                    pos.Y -= 7;
                }
                if (direccion == Direccion.ArribaIzda)
                {
                    pos.X -= 7;
                    pos.Y -= 7;
                }
                if (direccion == Direccion.AbajoIzda)
                {
                    pos.X -= 7;
                    pos.Y += 7;
                }
                if (direccion == Direccion.AbajoDcha)
                {
                    pos.X += 7;
                    pos.Y += 7;
                }

            }
        }
    }
}
